package com.linkgie.galaxyframework.process;

/**
 * 流程步骤；
 * <p>
 * 
 * 用于记录流程执行的每一个环节及其顺序。<br>
 * 步骤的编号从 0 开始，按顺序递增；
 * <p>
 * 
 * 流程每执行多一个环节，就增加一项新的执行步骤；
 * 
 * @author Hike
 *
 */
public interface ProcessStep {

	/**
	 * 流程步骤的编号；
	 * <p>
	 * 从 0 开始；
	 * 
	 * @return
	 */
	int getId();

	/**
	 * 流程节点的编号；
	 * 
	 * @return
	 */
	ExecutionNode getNode();

	/**
	 * 当前步骤是否已经完成；
	 * <p>
	 * 发生中断或者跳转都表示流程环节已完成；
	 * 
	 * @return
	 */
	boolean isCompleted();

	/**
	 * 当前步骤是否触发了中断；
	 * 
	 * @return
	 */
	boolean isTerminated();

	/**
	 * 执行模式；
	 * 
	 * @return
	 */
	ExecutionMode getExectionMode();

	/**
	 * 当前步骤完成时触发的分支；
	 * <p>
	 * 如果当前步骤尚未完成，或者当前步骤触发了中断，或者当前步骤是结束节点时，则返回 null；
	 * 
	 * @return
	 */
	ProcessBranch getTriggeredBranch();

	/**
	 * 跳转的目标节点Id；
	 * 
	 * @return
	 */
	default String getTargetNodeId() {
		ProcessBranch triggeredBranch = getTriggeredBranch();
		return triggeredBranch == null ? null : triggeredBranch.getTarget();
	}

	/**
	 * 获取已提交的数据集；
	 * 
	 * @return
	 */
	Dataset getCommittedDataset();

	/**
	 * 数据集；
	 * 
	 * @author Hike
	 *
	 */
	public interface Dataset {

		String get(String name);

	}
}
